home *** CD-ROM | disk | FTP | other *** search
/ All for Cell Phones: Sony Ericsson / Sony-Ericsson 2004.iso / Java / Excel / Sheet.jar / sheet / Table.class (.txt) < prev   
Encoding:
Java Class File  |  2001-09-03  |  7.0 KB  |  389 lines

  1. package sheet;
  2.  
  3. import javax.microedition.lcdui.Font;
  4. import javax.microedition.lcdui.Graphics;
  5. import javax.microedition.rms.RecordStore;
  6.  
  7. final class Table implements CellContainer {
  8.    // $FF: renamed from: UP int
  9.    public static final int field_0 = 1;
  10.    public static final int DOWN = 2;
  11.    public static final int LEFT = 3;
  12.    public static final int RIGHT = 4;
  13.    public static final int DB_VERSION_1 = 1;
  14.    public static final int DB_LAST_VERSION = 1;
  15.    public static final int MD_NORMAL = 0;
  16.    public static final int MD_CELLSIZE = 1;
  17.    private String name;
  18.    private Cell[][] cells;
  19.    private short[] rows;
  20.    private short[] cols;
  21.    private boolean dataChanged;
  22.    private short szX;
  23.    private short szY;
  24.    private byte cursorX;
  25.    private byte cursorY;
  26.    private short tblLeft;
  27.    private short tblTop;
  28.    private short tblRight;
  29.    private short tblBottom;
  30.  
  31.    public Table(short var1, short var2, short var3, short var4) {
  32.       this.cells = new Cell[var1][var2];
  33.       this.rows = new short[var2];
  34.       this.cols = new short[var1];
  35.       this.szX = var1;
  36.       this.szY = var2;
  37.  
  38.       for(int var5 = 0; var5 < var1; ++var5) {
  39.          this.cols[var5] = var3;
  40.       }
  41.  
  42.       for(int var6 = 0; var6 < var2; ++var6) {
  43.          this.rows[var6] = var4;
  44.       }
  45.  
  46.       this.name = "noname";
  47.    }
  48.  
  49.    public void moveCursor(int var1) {
  50.       switch (var1) {
  51.          case 1:
  52.             if (this.cursorY > 0) {
  53.                --this.cursorY;
  54.                if (this.cursorY < this.tblTop) {
  55.                   --this.tblTop;
  56.                }
  57.             } else {
  58.                Sheet.ported.CannotMoveSignal();
  59.             }
  60.             break;
  61.          case 2:
  62.             if (this.cursorY < this.szY - 1) {
  63.                ++this.cursorY;
  64.                if (this.cursorY >= this.tblBottom) {
  65.                   ++this.tblTop;
  66.                }
  67.             } else {
  68.                Sheet.ported.CannotMoveSignal();
  69.             }
  70.             break;
  71.          case 3:
  72.             if (this.cursorX > 0) {
  73.                --this.cursorX;
  74.                if (this.cursorX < this.tblLeft) {
  75.                   --this.tblLeft;
  76.                }
  77.             } else {
  78.                Sheet.ported.CannotMoveSignal();
  79.             }
  80.             break;
  81.          case 4:
  82.             if (this.cursorX < this.szX - 1) {
  83.                ++this.cursorX;
  84.                if (this.cursorX >= this.tblRight) {
  85.                   ++this.tblLeft;
  86.                }
  87.             } else {
  88.                Sheet.ported.CannotMoveSignal();
  89.             }
  90.       }
  91.  
  92.    }
  93.  
  94.    public short getColumnWidth(int var1) {
  95.       return this.cols[var1];
  96.    }
  97.  
  98.    public short getRowHeight(int var1) {
  99.       return this.rows[var1];
  100.    }
  101.  
  102.    public void setRowHeight(int var1, short var2) {
  103.       this.rows[var1] = var2;
  104.  
  105.       for(int var3 = 0; var3 < this.szX; ++var3) {
  106.          Cell var4 = this.cells[var3][var1];
  107.          if (var4 != null) {
  108.             var4.render();
  109.          }
  110.       }
  111.  
  112.       this.notifyChanged();
  113.    }
  114.  
  115.    public void setColumnWidth(int var1, short var2) {
  116.       this.cols[var1] = var2;
  117.  
  118.       for(int var3 = 0; var3 < this.szY; ++var3) {
  119.          Cell var4 = this.cells[var1][var3];
  120.          if (var4 != null) {
  121.             var4.render();
  122.          }
  123.       }
  124.  
  125.       this.notifyChanged();
  126.    }
  127.  
  128.    public void paint(Graphics var1, int var2, int var3, int var4) {
  129.       Font var5 = Font.getFont(64, 0, 8);
  130.       int var6 = var5.getHeight() + 1;
  131.       int var7 = var5.stringWidth("10") + 2;
  132.       var1.setColor(0);
  133.       var1.setFont(var5);
  134.       short var10 = this.tblLeft;
  135.  
  136.       int var8;
  137.       for(var8 = var7; var8 < var2 && var10 < this.szX; ++var10) {
  138.          short var11 = this.getColumnWidth(var10);
  139.          char var12 = (char)(65 + var10);
  140.          var1.drawString(String.valueOf(var12), var8 + 1 + var11 / 2, 1, 17);
  141.          var8 += var11 + 1;
  142.       }
  143.  
  144.       this.tblRight = (short)(var10 - 1);
  145.       var1.drawLine(0, var6, var8, var6);
  146.       var10 = this.tblTop;
  147.  
  148.       int var9;
  149.       for(var9 = var6; var9 < var3 && var10 < this.szY; ++var10) {
  150.          short var21 = this.getRowHeight(var10);
  151.          int var23 = var7;
  152.          boolean var13 = var10 == this.cursorY;
  153.          var1.drawString(String.valueOf(var10 + 1), var7 - 1, var9 + var21 - var6 + 2, 24);
  154.  
  155.          for(int var14 = this.tblLeft; var14 <= this.tblRight; ++var14) {
  156.             Cell var15 = this.cells[var14][var10];
  157.             short var16 = this.getColumnWidth(var14);
  158.             int var17 = 0;
  159.             if (var15 != null) {
  160.                var17 = var15.paint(var1, var23 + 1, var9 + 1);
  161.             }
  162.  
  163.             if (var14 == this.cursorX && var13) {
  164.                var1.setColor(var17);
  165.                var1.drawRect(var23 + 1, var9 + 1, var16 - 1, var21 - 1);
  166.                var1.setColor(0);
  167.             }
  168.  
  169.             if (var15 != null && !var15.isCalculated()) {
  170.                int var18 = var23 + var16;
  171.                int var19 = var9 + var21;
  172.                var1.drawLine(var23 + 1, var9 + 1, var18, var19);
  173.                var1.drawLine(var23 + 1, var19, var18, var9 + 1);
  174.             }
  175.  
  176.             var23 += var16 + 1;
  177.          }
  178.  
  179.          var9 += var21 + 1;
  180.          if (var4 == 1 && var13) {
  181.             var1.setStrokeStyle(1);
  182.             var1.drawLine(0, var9, var8, var9);
  183.             var1.setStrokeStyle(0);
  184.          } else {
  185.             var1.drawLine(0, var9, var8, var9);
  186.          }
  187.       }
  188.  
  189.       this.tblBottom = (short)(var10 - 1);
  190.       var1.drawLine(var7, 0, var7, var9);
  191.       int var22 = this.tblLeft;
  192.  
  193.       for(int var24 = var7; var22 <= this.tblRight; ++var22) {
  194.          short var25 = this.getColumnWidth(var22);
  195.          var24 += var25 + 1;
  196.          if (var4 == 1 && var22 == this.cursorX) {
  197.             var1.setStrokeStyle(1);
  198.             var1.drawLine(var24, 0, var24, var9);
  199.             var1.setStrokeStyle(0);
  200.          } else {
  201.             var1.drawLine(var24, 0, var24, var9);
  202.          }
  203.       }
  204.  
  205.       if (this.dataChanged) {
  206.          int var26 = var7 / 2;
  207.          int var27 = var6 / 2;
  208.          var1.drawLine(var26 - 1, var27 - 1, var26 + 1, var27 + 1);
  209.          var1.drawLine(var26 + 1, var27 - 1, var26 - 1, var27 + 1);
  210.       }
  211.  
  212.    }
  213.  
  214.    public Cell getByName(String var1) throws IllegalArgumentException {
  215.       try {
  216.          int var2 = var1.charAt(0) - 65;
  217.          if (var2 >= this.szX) {
  218.             var2 = var1.charAt(0) - 97;
  219.          }
  220.  
  221.          int var3 = Integer.parseInt(var1.substring(1, var1.length())) - 1;
  222.          return this.cells[var2][var3];
  223.       } catch (Exception var5) {
  224.          throw new IllegalArgumentException("Wrong cell name '" + var1 + "'");
  225.       }
  226.    }
  227.  
  228.    public void notifyChanged() {
  229.       this.dataChanged = true;
  230.    }
  231.  
  232.    public boolean isChanged() {
  233.       return this.dataChanged;
  234.    }
  235.  
  236.    public void calculate() {
  237.       int var1 = 0;
  238.       int var2 = -1;
  239.  
  240.       for(int var3 = 0; var3 < this.szX; ++var3) {
  241.          for(int var4 = 0; var4 < this.szY; ++var4) {
  242.             if (this.cells[var3][var4] != null) {
  243.                this.cells[var3][var4].notCalculated();
  244.             }
  245.          }
  246.       }
  247.  
  248.       while(var2 != 0 && var1 != var2) {
  249.          var1 = var2;
  250.          var2 = 0;
  251.  
  252.          for(int var5 = 0; var5 < this.szX; ++var5) {
  253.             for(int var6 = 0; var6 < this.szY; ++var6) {
  254.                Cell var7 = this.cells[var5][var6];
  255.                if (var7 != null && !var7.isCalculated() && !var7.calculate()) {
  256.                   ++var2;
  257.                }
  258.             }
  259.          }
  260.       }
  261.  
  262.    }
  263.  
  264.    public Cell getCurrentCell(boolean var1) {
  265.       Cell var2 = this.cells[this.cursorX][this.cursorY];
  266.       if (var2 == null && var1) {
  267.          var2 = new Cell(this, this.cursorX, this.cursorY);
  268.          this.cells[this.cursorX][this.cursorY] = var2;
  269.       }
  270.  
  271.       return var2;
  272.    }
  273.  
  274.    public void clearCurrentCell() {
  275.       if (this.cells[this.cursorX][this.cursorY] != null) {
  276.          this.cells[this.cursorX][this.cursorY] = null;
  277.          this.notifyChanged();
  278.       }
  279.  
  280.    }
  281.  
  282.    public int getCurrentColumn() {
  283.       return this.cursorX;
  284.    }
  285.  
  286.    public int getCurrentRow() {
  287.       return this.cursorY;
  288.    }
  289.  
  290.    public String getName() {
  291.       return this.name;
  292.    }
  293.  
  294.    public void save(String var1) throws IllegalArgumentException {
  295.       this.name = var1;
  296.  
  297.       try {
  298.          RecordStore.deleteRecordStore(var1);
  299.       } catch (Exception var11) {
  300.       }
  301.  
  302.       try {
  303.          RecordStore var2 = RecordStore.openRecordStore(var1, true);
  304.          byte[] var3 = new byte[(this.szX + 1) * 2 + (this.szY + 1) * 2 + 3];
  305.          var3[0] = 1;
  306.          var3[1] = (byte)this.szX;
  307.          var3[2] = (byte)this.szY;
  308.          int var4 = 3;
  309.  
  310.          for(int var5 = 0; var5 < this.szX; ++var5) {
  311.             short var6 = this.getColumnWidth(var5);
  312.             var3[var4] = (byte)var6;
  313.             var3[var4 + 1] = (byte)(var6 >>> 8);
  314.             var4 += 2;
  315.          }
  316.  
  317.          for(int var13 = 0; var13 < this.szY; ++var13) {
  318.             short var7 = this.getRowHeight(var13);
  319.             var3[var4] = (byte)var7;
  320.             var3[var4 + 1] = (byte)(var7 >>> 8);
  321.             var4 += 2;
  322.          }
  323.  
  324.          var2.addRecord(var3, 0, var3.length);
  325.  
  326.          for(int var14 = 0; var14 < this.szX; ++var14) {
  327.             for(int var8 = 0; var8 < this.szY; ++var8) {
  328.                Cell var9 = this.cells[var14][var8];
  329.                if (var9 != null) {
  330.                   byte[] var10 = var9.serialize(1);
  331.                   if (var10 != null) {
  332.                      var2.addRecord(var10, 0, var10.length);
  333.                   }
  334.                }
  335.             }
  336.          }
  337.  
  338.          var2.closeRecordStore();
  339.          this.dataChanged = false;
  340.       } catch (Exception var12) {
  341.          throw new IllegalArgumentException("'" + var1 + "' can't be saved");
  342.       }
  343.    }
  344.  
  345.    public static Table load(String var0) throws IllegalArgumentException {
  346.       try {
  347.          RecordStore var2 = RecordStore.openRecordStore(var0, true);
  348.          int var3 = var2.getNumRecords();
  349.          byte[] var4 = var2.getRecord(1);
  350.          byte var5 = var4[0];
  351.          if (var5 != 1) {
  352.             throw new IllegalArgumentException();
  353.          } else {
  354.             short var6 = (short)var4[1];
  355.             short var7 = (short)var4[2];
  356.             int var8 = 3;
  357.             Table var1 = new Table(var6, var7, (short)0, (short)0);
  358.             var1.name = var0;
  359.  
  360.             for(int var9 = 0; var9 < var6; ++var9) {
  361.                short var10 = (short)(var4[var8] + (var4[var8 + 1] << 8));
  362.                var8 += 2;
  363.                var1.setColumnWidth(var9, var10);
  364.             }
  365.  
  366.             for(int var15 = 0; var15 < var7; ++var15) {
  367.                short var11 = (short)(var4[var8] + (var4[var8 + 1] << 8));
  368.                var8 += 2;
  369.                var1.setRowHeight(var15, var11);
  370.             }
  371.  
  372.             for(int var16 = 2; var16 <= var3; ++var16) {
  373.                byte[] var12 = var2.getRecord(var16);
  374.                Cell var13 = Cell.deserialize(var12, var1, var5);
  375.                if (var13 != null) {
  376.                   var1.cells[var13.getColumn()][var13.getRow()] = var13;
  377.                }
  378.             }
  379.  
  380.             var2.closeRecordStore();
  381.             var1.dataChanged = false;
  382.             return var1;
  383.          }
  384.       } catch (Exception var14) {
  385.          throw new IllegalArgumentException("'" + var0 + "' can't be read");
  386.       }
  387.    }
  388. }
  389.